<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // var name = 'windowName'
        // var a = {
        //     name : 'lisi',
        //     fn1 : function(){
        //         console.log(this.name)
        //     },
        //     fn2 : function(){
        //         let _this = this ; // this指向
        //         setTimeout(function(){
        //             _this.fn1() //
        //         },100)
        //     }
        // }

        // var name = 'windowName'
        // var a = {
        //     name : 'lisi',
        //     fn1 : function(){
        //         console.log(this.name)
        //     },
        //     fn2 : function(){
        //         setTimeout(() =>{
        //             this.fn1() // 指向词法环境中的this
        //         },100)
        //     }
        // }



        var name = 'windowName'
        var a = {
            name : 'lisi',
            fn1 : function(){
                console.log(this.name)
            },
            fn2 : function(){
                setTimeout((() =>{
                    this.fn1() // 指向词法环境中的this
                }).call(a),100)
            }
        }
        // 上面三种方法实现的效果一样 ,  都是指向a对象 , 看似不同实际上都是在编译阶段的时候就确定了this的指向

        a.fn2()
    </script>
</body>
</html>